package com.zyx.javademo.exception;


import java.lang.Thread.UncaughtExceptionHandler;

/**
 * @author Yaxi.Zhang
 * @since 2021/9/28 17:41
 * desc: 借助 UncaughtExceptionHandler 接口实现多异常捕获
 * reference: https://honeypps.com/java/java-multi-thread-of-uncaught-exception-handler/
 * {@link InitiativeCaught} 中介绍了一种主动方法来解决未检测异常
 * 在Thread ApI中同样提供了 UncaughtExceptionHandle, 它能检测出某个由于未捕获的异常而终结的情况
 * 这两种方法是互补的, 通过将二者结合在一起, 就能有效地防止线程泄露问题
 */
public class WitchCaughtThread {
    public static void main(String args[]) {
        // 可以为所有的Thread设置一个默认的UncaughtExceptionHandler
        // 调用Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法
        // 这是Thread的一个static方法
        /*Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());*/
        Thread thread = new Thread(new Task());
        thread.setUncaughtExceptionHandler(new ExceptionHandler());
        thread.start();
    }
}

class ExceptionHandler implements UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("==Exception: " + e.getMessage());
    }
}